#!/usr/bin/env node
'use strict';

const fs = require('fs');
const path = require('path');

/**
 * 快速创建配置文件模板
 * 使用方法: node generator/create-config.js <实体名称> [中文描述]
 */

// 获取命令行参数
const args = process.argv.slice(2);
const entityName = args[0];
const entityDesc = args[1] || `${entityName}表`;

if (!entityName) {
  console.log('❌ 请提供实体名称');
  console.log('使用方法: node generator/create-config.js <实体名称> [中文描述]');
  console.log('例如: node generator/create-config.js user 用户表');
  process.exit(1);
}

// 配置模板
const configTemplate = {
  name: entityName,
  cname: entityDesc,
  fieldsItemExample: {
    name: 'field_name',
    type: 'STRING', // STRING, INTEGER, TEXT, BOOLEAN, DATE, FLOAT, DECIMAL
    length: 255,
    min: 1,
    max: 255,
    required: true,
    description: '字段描述', // 供swagger使用
    example: '示例值', // 供swagger使用
    primaryKey: false, // 是否为主键
    unique: false, // 是否唯一
    allowNull: false, // 是否允许为空
    autoIncrement: false, // 是否自增
    defaultValue: '', // 数据库表中字段的默认值
    comment: '字段注释', // 数据库表中字段的描述
    references: {
      // 外键设置（可选）
      model: 'other_table', // 外键关联表
      key: 'id', // 外键字段名
    },
    onUpdate: 'CASCADE', // 外键更新约束
    onDelete: 'CASCADE', // 外键删除约束
  },
  fields: [
    // 示例字段，请根据需要修改
    {
      name: 'name',
      type: 'STRING',
      length: 100,
      required: true,
      description: `${entityDesc}名称`,
      example: '示例名称',
      allowNull: false,
      comment: `${entityDesc}名称`,
    },
    {
      name: 'status',
      type: 'INTEGER',
      required: false,
      description: '状态',
      example: 1,
      allowNull: true,
      defaultValue: 1,
      comment: '状态：1-启用，0-禁用',
    },
    {
      name: 'description',
      type: 'TEXT',
      required: false,
      description: '描述',
      example: '这是一个描述',
      allowNull: true,
      comment: '详细描述',
    }
  ],
  fields_option: {
    // Sequelize 模型选项
    timestamps: true, // 自动添加 createdAt, updatedAt
    paranoid: true,   // 软删除，添加 deletedAt
    underscored: true, // 使用下划线命名
  },
  createTable_option: {
    // 数据库表选项
    charset: 'utf8mb4',
    collate: 'utf8mb4_unicode_ci',
    // 复合唯一约束示例
    // uniqueKeys: {
    //   unique_constraint_name: {
    //     fields: ['field1', 'field2']
    //   }
    // }
  },
};

// 生成配置文件
const configContent = `'use strict';

/**
 * ${entityDesc} 配置文件
 * 
 * 使用说明:
 * 1. 修改 fields 数组中的字段定义
 * 2. 运行 npm run generator-entity 生成代码
 * 3. 或运行 node generator/generate.js 交互式生成
 * 
 * 字段类型说明:
 * - STRING: 字符串
 * - INTEGER: 整数
 * - TEXT: 长文本
 * - BOOLEAN: 布尔值
 * - DATE: 日期时间
 * - FLOAT: 浮点数
 * - DECIMAL: 精确小数
 */

module.exports = ${JSON.stringify(configTemplate, null, 2)};
`;

// 保存配置文件
const configPath = path.join(__dirname, 'config.js');
fs.writeFileSync(configPath, configContent);

console.log('✅ 配置文件已生成:', configPath);
console.log('📝 请编辑配置文件中的字段定义，然后运行:');
console.log('   npm run generator-entity');
console.log('或者运行交互式生成器:');
console.log('   node generator/generate.js');

// 显示生成的配置预览
console.log('\n📋 生成的配置预览:');
console.log(`实体名称: ${entityName}`);
console.log(`中文描述: ${entityDesc}`);
console.log(`默认字段: name, status, description`);
console.log('\n💡 提示: 请根据实际需求修改 fields 数组中的字段定义');
